home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1986 December
/
Ahoy_Magazine_86-12_1986_Double_L.d64
/
Rebels & Lords
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
11KB
|
312 lines
5 print"[147][160]":poke53280,0:poke53281,0:poke646,1
10 poke52,128:poke56,128:clr:goto1260
20 printd$b$;:printd$dd$b$;:printd$dd$dd$b$;:printd$dd$dd$dd$b$;d$;:return
30 gosub50:goto70
40 pokep1,f1:pokeg1,w1:pokeg1,w1-w:return
50 pokep1,f2:pokeg1,w3:pokeg1,w3-w:return
60 pokep1,f3:pokeg1,w1:pokeg1,w1-w:return
70 gosub90:ifjf=oandjd=othen70
80 return
90 jd=o:jf=t1-(peek(t2)andt1):ifjf=othen110
100 jd=jfandt5:jf=jfandt6:return
110 geta$:ifa$=""thenreturn
120 jf=m:forjd=wto5:ifa$=mid$(o$,jd,w)thenjf=bi(jd-w)
130 next:jf=jf-(jf<o):goto100
140 pokezy+ii*sn,oy+8*r:pokezx+ii*sn,fnl(ox+t6*c):j=bi(sn)
150 poket9,peek(t9)orj:iffnh(ox+t6*c)>othenpoket4,peek(t4)orj:return
160 j=t7-j:poket4,peek(t4)andj:return
170 ifa=othena=w:na=w:return
180 na=o:fori=atowstepm:ifa(i,o)<othenna=i
190 next:ifna>othenreturn
200 ifa<199thena=a+w:na=a:return
210 gosub20:print" too many armies-hit f7/fb";:gosub40:gosub70
220 return
230 print"[147]";:forr=oto18:printleft$(d$,r+3);
240 forc=oto18:k=m(r,c):ifk<3thenprintm$(k);:goto260
250 k=f(k-t3,o):printcl$(k);ft$;
260 next:next:ifa<wthen310
270 fori=wtoa:ifa(i,o)<othen300
280 r=a(i,ii):c=a(i,t3):k=m(r,c):ifk=work>iithen300
290 k=a(i,o):printleft$(d$,r+t3);left$(r$,ii*c+ii);cl$(k);ar$;
300 next
310 return
320 gosub90:ifjd=othen380
330 ifjdandwthenr=(r-w)-(r<w):goto370
340 ifjdandiithenr=(r+w)+(r>17):goto370
350 ifjdand4thenc=(c-w)-(c<w):goto370
360 c=(c+w)+(c>17)
370 gosub140
380 return
390 k=o:aa(o,o)=m:aa(o,w)=o:ifm(r,c)<t3then410
400 j=m(r,c)-t3:aa(o,o)=j:aa(o,w)=f(j,w)
410 ifa<wthen470
420 forj=wtoa:if(a(j,o)=m)ora(j,o)<>ow(r,c)then460
430 if(r<>a(j,ii))or(c<>a(j,t3))then460
440 ifa(j,4)<othenaa(o,o)=j:aa(o,w)=a(j,w):goto460
450 k=k+w+(k>9):aa(k,o)=j:aa(k,w)=a(j,w)
460 next
470 ma=aa(o,w):return
480 r=10:c=10:sn=o:gosub140:printbb$h$" "pn$(pp);" hit fb/f7, week"wk;:gosub30
490 ifpeek(t0)and6thengosub20:poket9,o:return
500 printbb$h$" "pn$(pp)" looking (como to end)";:gosub770
510 gosub320:ifjd=oandjf=oand((peek(t0)and6)=o)then510
520 ifpeek(t0)and6thengosub20:poket9,o:return
530 ifjd<>othen500
540 ifma=othen570
550 gosub1210:ifms=othen490
560 gosub1020:goto490
570 printbb$h$" no troops available-hit fb/f7";:gosub40:gosub70:goto490
580 qa=o:ua=m:fori=otonf-w:iff(i,w)>qathenqa=f(i,w):ua=i
590 next:ud=m:qd=o:ifa<wthen620
600 fori=wtoa:ifa(i,o)=mthen620
610 ifa(i,w)>qdthenud=i:qd=a(i,w)
620 next
630 ifua=morqd=>qathen670
640 iff(ua,o)<>othen670
650 gosub170:a(na,o)=o:a(na,w)=int(.34*qa):f(ua,w)=f(ua,w)-a(na,w)
660 a(na,ii)=f(ua,ii):a(na,t3)=f(ua,t3):a(na,4)=m
670 ifa=othenreturn
680 fori=wtoa:ifa(i,o)<>oora(i,4)<>mthen760
690 ua=a(i,ii):ud=a(i,t3):r=m:c=o
700 forj=otonf-w:ifr>morf(j,o)>oorrnd(w)>.6then730
710 ifabs(f(j,ii)-ua)>t3then730
720 ifabs(f(j,t3)-ud)<=t3thenr=f(j,ii):c=f(j,t3)
730 next:ifr>mthen750
740 r=int(19*rnd(2)):c=int(19*rnd(w)):if(r=ua)and(c=ud)then740
750 a(i,4)=r:a(i,fi)=c
760 next:return
770 gosub20:ma=o:l=m(r,c):ifl<t3thenonl+wgoto830,890,940
780 ifow(r,c)<>ppthenk=ow(r,c):printpn$(ow(r,c))"'s castle";:goto950
790 printcl$(pp);" your castle";:gosub390
800 printd$dd$"troops:";ma;" levy:"f(l-t3,4);:ifma>othenprints$;
810 ifk>othengosub960
820 goto950
830 ifow(r,c)=mthenprint"[158]grass";:goto950
840 ifow(r,c)<>ppthenk=ow(r,c):printpn$(k)"'s troops";:goto950
850 printcl$(pp);" your troops";:gosub390:printd$dd$"idle troops:";ma;
860 ifma>othenprints$;
870 ifk>othengosub960
880 goto950
890 ifow(r,c)<>ppthenprint"[149]woods";:goto950
900 print"[149] your troops, hidden";:gosub390:printd$dd$"idle troops:";ma;
910 ifma>othenprints$;
920 ifk>othengosub960
930 goto950
940 print"[151]rocks";
950 return
960 printd$dd$dd$;:ifk<4thenfori=wtok:gosub1000:next:return
970 fori=wtot3:gosub1000:next:printd$dd$dd$dd$;
980 ifk<7thenfori=4tok:gosub1000:next:return
990 fori=4to6:gosub1000:next:return
1000 printright$(" "+str$(aa(i,o)),fi)+ar$+mid$(str$(aa(i,w))+" ",ii,4);
1010 return
1020 gosub170:ifna=othenreturn
1030 a(na,o)=pp:a(na,w)=ms:a(na,ii)=rs:a(na,t3)=cs:a(na,4)=rd:a(na,fi)=cd
1040 gosub20:print"army "na" of"ms" sent";
1050 printbb$h$" hit fb/f7 to continue";:gosub30
1060 gosub20:printbb$;:ifm(rs,cs)>iithen1090
1070 nk=aa(o,o):a(nk,w)=a(nk,w)-ms:ifa(nk,w)<wthena(nk,o)=m
1080 return
1090 nk=aa(o,o):f(nk,w)=f(nk,w)-ms:iff(nk,w)<othenf(nk,w)=o
1100 return
1110 printbb$h$"js/crsr size, 0 cancel, fb/f7 end";:gosub20:print"troops 1-";ma;
1120 ms=o:goto1200
1130 gosub90:if(jf=o)and(jd=o)then1130
1140 ifjf>othenreturn
1150 ifjdandwthenms=ms+10:goto1190
1160 ifjdandiithenms=ms-10:goto1190
1170 ifjdand4thenms=ms-w:goto1190
1180 ifjdand8thenms=ms+w
1190 ms=-ms*(ms=>o):ifms>mathenms=ma
1200 printd$dd$b$d$dd$" sending"ms;:goto1130
1210 gosub1110:ifms=othenreturn
1220 rs=r:cs=c:sn=w:gosub140:gosub20
1230 printbb$h$"position x with js/crsr, then f7/fb";
1240 gosub320:ifjf=othen1240
1250 rd=r:cd=c:sn=o:poket9,peek(t9)andw:c=cs:r=rs:gosub140:return
1260 gosub2560:gosub2190
1270 fori=otonp:dp(i)=o:next
1280 ifnp>wthen1300
1290 pp=w:gosub480:gosub580:gosub1390:goto1370
1300 fori=wtonp:pp(i)=i:next:fori=wtonp:forj=wtonp-w:ifrnd(o)>.5then1320
1310 qa=pp(j):pp(j)=pp(j+w):pp(j+w)=qa
1320 next:next:pp(o)=w
1330 pp=pp(pp(o)):ifdp(pp)>othen1350
1340 gosub480
1350 pp(o)=pp(o)+1:ifpp(o)<=npthen1330
1360 gosub580:gosub1390
1370 gosub2730:ifnp-dp(o)>othen1280
1380 gosub2990:stop
1390 printh$b$h$" hit fb/f7 to see armies march";:gosub60:gosub70
1400 fortq=wtofi:gosub1410:next:wk=wk+w:return
1410 ifa=0thenreturn
1420 ns=int(w+a*rnd(-ti)):na=ns
1430 printbb$h$" [144]moving armies...";:na=w-(na<a)*na
1440 ifa(na,o)<oora(na,4)=mthen1960
1450 rs=a(na,ii):cs=a(na,t3):rd=a(na,4):cd=a(na,fi):pp=a(na,o)
1460 if(rs=rd)or(cs=cd)thenrd=rs+sgn(rd-rs):cd=cs+sgn(cd-cs):goto1490
1470 ifrnd(2)<.5thenrd=rs+sgn(rd-rs):cd=cs:goto1490
1480 rd=rs:cd=cs+sgn(cd-cs)
1490 ifm(rd,cd)=2thengosub2050:goto1910
1500 a(na,ii)=m:ifm(rs,cs)>wthen1530
1510 r=rs:c=cs:gosub390:ifma>oork>othen1530
1520 ow(r,c)=m:ifm(r,c)=othenprintleft$(d$,r+t3)left$(r$,ii*c+ii);bl$;
1530 qa=a(na,w):ua=qa:dp=ow(rd,cd):ifdp=mordp=ppthen1890
1540 r=rd:c=cd:gosub390:ifma>oork>othen1600
1550 ifm(r,c)<2then1890
1560 gosub20:printpn$(pp)" takes "pn$(dp)"'s";
1570 printd$dd$" [144]without a fight!";
1580 sn=ii:gosub140:printbb$h$" hit fb/f7 to continue";:gosub60
1590 gosub70:printbb$;:poket9,0:gosub20:goto1890
1600 qd=ma:ga=.2+.35*rnd(w):ff=.6:ifk>othenfori=wtok:qd=qd+aa(i,w):next
1610 gd=.25+.3*rnd(2)-.1*(m(r,c)>2):ud=qd:gosub2110
1620 qa=int(qa-qd*gd*ff):ifqa<othenqa=o
1630 gosub2150:ifqa=othen1780
1640 qd=int(qd-qa*ga):ifqd<othenqd=o
1650 gosub2150:ifqd>othenff=w:goto1620
1660 ifk=othen1680
1670 fori=wtok:a(aa(i,o),o)=m:next:gosub390:goto1660
1680 k=aa(o,o):ifm(r,c)>2then1710
1690 ifma>othena(k,o)=m
1700 goto1720
1710 f(k,o)=pp:f(k,w)=o
1720 ow(r,c)=pp:printleft$(d$,r+t3)left$(r$,ii*c+ii);
1730 ifm(r,c)=wthenprintwd$;:goto1760
1740 ifm(r,c)>iithenprintcl$(pp)ft$;:goto1760
1750 printcl$(pp)ar$;
1760 gosub20:printpn$(pp);" is victorious!";:gosub1980:a(na,w)=qa
1770 gosub60:goto1890
1780 gosub20:printpn$(dp);" repells invaders!";:gosub40:gosub1980
1790 ud=ud-qd:ifud<=othen1850
1800 ifk=oorud<=othen1850
1810 fori=wtok:ifud<=othen1840
1820 ifaa(i,w)>udthena(aa(i,o),w)=aa(i,w)-ud:ud=o:goto1840
1830 a(aa(i,o),o)=m:ud=ud-aa(i,w)
1840 next:gosub390:goto1800
1850 ifud<=othen1880
1860 ifm(r,c)>iithenf(aa(o,o),w)=ma-ud:goto1880
1870 a(aa(o,o),w)=ma-ud
1880 a(na,o)=m:goto1960
1890 a(na,ii)=rd:a(na,t3)=cd:r=rd:c=cd:ow(r,c)=a(na,o):gosub2000
1900 ifrd<>a(na,4)orcd<>a(na,fi)then1960
1910 r=rd:c=cd:gosub390:ifm(r,c)>iithen1940
1920 ifaa(o,o)<wthena(na,4)=m:goto1960
1930 k=aa(o,o):a(k,w)=a(k,w)+qa:goto1950
1940 k=aa(o,o):f(k,w)=f(k,w)+qa
1950 a(na,o)=m
1960 ifna<>nsthen1430
1970 return
1980 poke53280,fi:printbb$h$" hit fb/f7 to continue";:gosub70
1990 poket9,o:printbb$;:gosub20
2000 printleft$(d$,r+t3)left$(r$,ii*c+ii);
2010 ifm(r,c)=wthenprintwd$;:goto2040
2020 ifm(r,c)>iithenprintcl$(ow(r,c))ft$;:goto2040
2030 printcl$(ow(r,c))ar$;
2040 return
2050 r=rs:rd=r:c=cs:cd=c:ifa(na,o)=othen2100
2060 printbb$h$"hit fb/f7 to go on";
2070 rd=r:cd=c:ifm(r,c)=othensn=o:gosub140
2080 gosub20:printpn$(a(na,o));"'s army "na;
2090 printd$dd$" unable to proceed";:gosub40:gosub70:poket9,o
2100 a(na,4)=rs:a(na,fi)=cs:gosub20:printbb$;:return
2110 ct=ii:sn=ii:gosub140:pp=a(na,o):dp=ow(r,c):poke53280,ii
2120 printleft$(d$,r+t3)left$(r$,ii*c+ii)cl$(pp)"^";:gosub20
2130 print" "pn$(pp)" attacks "pn$(dp);:gosub2160
2140 printbb$h$" hit fb/f7 to see outcome";:gosub30:printbb$;:return
2150 pokep2,f1:pokeg2,w2:pokeg2,w2-w
2160 ct=-(ct+w)*(ct<2):poke53289,ct:gp=(NULL)^6-log((NULL)^3):print"[149]";
2170 printd$dd$right$(" "+str$(qa),9)right$(" "+str$(qd),14);
2180 return
2190 print"[147][144]"
2200 a$="":input"lords (1-4)";a$:np=val(a$):ifnp<wornp>4then2200
2210 fori=wtonp:print"lord"i"'s name";:inputa$:pn$(i)=pn$(i)+a$:next
2220 a$="":print"castles (";t3*np;:input"-35)";a$
2230 nf=val(a$):ifnf<t3*npornf>35then2220
2240 print"levels: 1-no terrain":print" 2-hills, some trees"
2250 print" 3-hills and forests"
2260 a$="":input"level (1-3)";a$:gl=val(a$):ifgl<worgl>t3then2260
2270 gosub2970
2280 print"[147]placing [158]grass &";:fori=oto18:forj=oto18:m(i,j)=o:ow(i,j)=m
2290 next:print"&";:next:ifgl=wthen2360
2300 print:print"[151]rocks %";:j=6:fori=oto18:ifrnd(o)<.2then2330
2310 ifrnd(t3)>.2thenm(i,j)=ii
2320 ifrnd(w)>.2thenm(i,j+w)=ii
2330 j=int(j-.2+1.9*rnd(2)):ifj<4thenj=4
2340 ifj>14thenj=14
2350 print"%";:next
2360 ifgl=wthen2400
2370 print:print"[149]trees #";:fori=wto50
2380 r=int(19*rnd(t3)):c=int(19*rnd(w)):ifm(r,c)<>othen2380
2390 m(r,c)=w:print"#";:next
2400 ifgl<t3then2420
2410 forkk=wtofi:i=int(t3+12*rnd(9)):j=int(t3+12*rnd(6)):gosub2520:next
2420 print:print"castles []";:fori=otonf-w:kk=o:ifi<npthenkk=i+w
2430 r=int(19*rnd(o)):c=int(19*rnd(t3)):ifm(r,c)>wthen2430
2440 f(i,ii)=r:f(i,t3)=c:f(i,k)=kk:m(r,c)=i+t3:ow(r,c)=kk:print"[]";:next
2450 gosub230:printd$;"ok (y/n)?";:gosub50
2460 geta$:ifa$<>"y"anda$<>"n"then2460
2470 ifa$="n"then2280
2480 gosub20:fori=otonf-w:iff(i,o)>othen2500
2490 k=.09+1.3*rnd(w):f(i,4)=w+int(w/k):f(i,w)=int(t5*rnd(w)+rnd(ii)/k):goto2510
2500 f(i,4)=7+np:f(i,w)=int(20+nf+15*rnd(w)+ii*(abs(9-f(i,ii))+abs(9-f(i,t3))))
2510 next:return
2520 forr=i-4toi+4:forc=j-4toj+4:ifr<oorr>18orc<oorc>18then2550
2530 ifm(r,c)<>othen2550
2540 k=8-abs(i-r)-abs(j-c):ifrnd(ii)<k/10thenm(r,c)=w
2550 next:print"#";:next:return
2560 o=0:w=1:ii=2:m=-1:i=o:j=o:r=o:c=o:qa=o:jf=o:jd=o:k=o:kk=o:rr=o:t1=31:fi=5
2570 t2=56320:t3=3:t4=53264:t5=15:t6=16:t7=255:t8=256:t9=53269:t0=653:wk=1
2580 w2=129:w1=21:w3=17:p1=54273:f1=50:f2=100:f3=150:g1=54276:g2=54283
2590 zx=53248:zy=zx+1:o$="[145][157][136]":deffnh(k)=int(k/t8):deffnl(k)=k-t8*fnh(k)
2600 dimm(18,18),cl$(4),bi(7),m$(2),a(199,5),f(35,4),ow(18,18),pn$(4)
2610 fori=oto4:cl$(i)=mid$("[144][158][159]",i+w,w):pn$(i)=cl$(i):next:pn$(o)="[144]rebel"
2620 b$=" ":dd$="":bb$=" "+b$
2630 ft$="[]":ar$="^_":wd$="[149]##":rk$="[151]%%":bl$="[158]&&":h$="":m$(o)=bl$:m$(w)=wd$
2640 print"[147]"spc(11)"rebels":printspc(14)"and":printspc(14)"lords"
2650 m$(ii)=rk$:fori=oto7:bi(i)=ii^i:next:ox=30:oy=57:gosub2890
2660 fori=otoii:poke34808+i,i:poke53287+i,6:next:poke53285,6:poke53275,o
2670 poke53276,o:poke53277,o:poket9,o:poke53271,o:poke53280,fi:poke53281,fi
2680 fori=wto199:a(i,o)=m:next:a=o:d$=""
2690 r$="[157]":fori=54272to54300:pokei,0
2700 s$=d$+dd$+left$(r$,27)+"(fb/f7-send)"
2710 next:poke54296,143:poke54287,102:poke54292,240:poke54290,17:poke54285,246
2720 poke54278,250:poke54280,50:return
2730 fori=otonf-w:f(i,w)=f(i,w)+f(i,4):next
2740 gosub20:printbb$h$" hit fb/f7 to go on, ctrl to quit";
2750 gosub90:ifpeek(t0)and6then2780
2760 ifjf=othen2750
2770 printbb$;:return
2780 printbb$h$" crsr/js for player, fb/f7 to quit"d$" -1 for none, 0 for all";
2790 ms=m
2800 printd$dd$" "ms" ";:gosub90:ifjf>othen2830
2810 ifjd>othenms=ms+w:ifms>npthen2790
2820 goto2800
2830 ifms=mthengosub20:printbb$;:return
2840 ifms=othendp(o)=np:printbb$;:gosub20:return
2850 ifa>othenfori=wtoa:ifa(i,o)=msthena(i,o)=o
2860 next:fori=otonf-w:iff(i,o)=msthenf(i,o)=o
2870 next:forr=oto18:forc=oto18:ifow(r,c)=msthenow(r,c)=o
2880 next:next:gosub230:dp(ms)=w:dp(o)=dp(o)+w:goto2740
2890 ba=40960:sa=zx:poke56334,peek(56334)and254:pokew,peek(w)and251
2900 fori=oto1023:pokei+ba,peek(i+sa):next
2910 pokew,peek(w)or4:poke56334,peek(56334)orw
2920 ba=40960:readsa:ifsa<othen2940
2930 sa=ba+8*sa:fori=satosa+7:readj:pokei,j:next:goto2920
2940 ba=32768:readsa:ifsa<othen2960
2950 sa=ba+64*sa:fori=satosa+63:readj:pokei,j:next:goto2940
2960 return
2970 poke56578,peek(56578)ort3:poke56576,(peek(56576)and252)orw
2980 poke648,132:poke53272,(peek(53272)and240)or8:return
2990 poke56578,peek(56578)ort3:poke56576,(peek(56576)and252)ort3
3000 poke648,4:poke53272,(peek(53272)and240)or4:print"[147]":return
3010 data27,,102,102,63,60,60,60,,29,,102,102,252,60,60,60,0,30,240,128,237
3020 data246,246,109,255,,31,,,182,219,219,182,254,,38,,5,2,80,32,10,4,0
3030 data35,216,115,22,124,24,24,124,,37,34,119,239,239,126,253,239,255,-1
3040 data0,255,255,240,255,255,240,240,,240,240,,240,240,,240,240,,240
3050 data240,,240,240,,240,255,255,240,255,255,240,,,,,,,,,,,,,,,,,0
3060 data0,,,,,,,,,,,,,,,,,1,15,255,,3,252,,195,252,48,255,15,240,252,3,240
3070 data252,3,240,255,15,240,195,252,48,3,252,,15,255,,,,,,,,,,,,,,,,,,0
3080 data0,,,,,,,,,,,,,,,,,2,227,12,112,113,152,224,,,,248,1,240,,,,,,0
3090 data248,1,240,,,,113,152,224,227,12,112
3100 data0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-1